package ru.mirent.treenode;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

/**
 * TODO На подумать, идея в следующем: построить дерево из JSON с использованием класса TreeNode или просто при обходе
 * рекурсией, а затем подумать что с ним сделать, возможно сравнить с другим JSON.
 */
public class TreeNodeTest {

    /**
     * Тестовый метод генерации структура в виде дерева.
     * @throws JsonProcessingException
     */
    @Test
    void ff() throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        String json = "{\"key1\":\"значение 2\",\"key2\":\"value2\",\"key3\":\"value3\",\"key4\":\"value3\"}";
        Map<String, Object> map = mapper
                .readValue(json, new TypeReference<Map<String, Object>>(){});
        System.out.println(map);
        List<TreeNode> nodeList = new ArrayList<>();

        for (Map.Entry<String, Object> entry: map.entrySet()) {
            nodeList.add(
                    new TreeNode(entry.getKey(), List.of(new TreeNode((String) entry.getValue(), Collections.emptyList())))
            );
        }
        TreeNode treeNode4 = new TreeNode("*", nodeList);

        List<TreeNode> nodeList2 = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            nodeList2.add(new TreeNode(i + "", List.of(treeNode4)));
        }

        TreeNode treeNode5 = new TreeNode("*", nodeList2);
        System.out.println(treeNode5);
    }
}
